//package com.qzimp.fujiancuo.utils;
//
//import cn.hutool.core.io.FastByteArrayOutputStream;
//import com.qzimp.fujiancuo.config.MinioProperties;
//import io.minio.*;
//import io.minio.messages.Bucket;
//import io.minio.messages.Item;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.annotation.Resource;
//import javax.servlet.ServletOutputStream;
//import javax.servlet.http.HttpServletResponse;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.UUID;
//
//public class MinioUtil {
//    @Autowired
//    private MinioProperties minioProperties;
//    @Resource
//    private MinioClient minioClient;
//    /**
//     * 查看存储bucket是否存在
//     * @return boolean
//     */
//    public Boolean bucketExists(String bucketName) {
//        Boolean found;
//        try {
//            found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return found;
//    }
//
//    /**
//     * 创建存储bucket
//     * @return Boolean
//     */
//    public Boolean makeBucket(String bucketName) {
//        try {
//            minioClient.makeBucket(MakeBucketArgs.builder()
//                    .bucket(bucketName)
//                    .build());
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//    /**
//     * 删除存储bucket
//     * @return Boolean
//     */
//    public Boolean removeBucket(String bucketName) {
//        try {
//            minioClient.removeBucket(RemoveBucketArgs.builder()
//                    .bucket(bucketName)
//                    .build());
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//        return true;
//    }
//    /**
//     * 获取全部bucket
//     */
//    public List<Bucket> getAllBuckets() {
//        try {
//            List<Bucket> buckets = minioClient.listBuckets();
//            return buckets;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 文件上传
//     *
//     * @param file 文件
//     * @return Boolean
//     */
//    public String upload(MultipartFile file) {
//        String originalFilename = file.getOriginalFilename();
//        if (StringUtils.isBlank(originalFilename)){
//            throw new RuntimeException();
//        }
//        String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
//        String objectName = DateUtil.now() + "/" + fileName;
//        try {
//            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(minioProperties.getBucketName()).object(objectName)
//                    .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
//            //文件名称相同会覆盖
//            minioClient.putObject(objectArgs);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//        return objectName;
//    }
//
//    /**
//     * 预览图片
//     * @param fileName
//     * @return
//     */
//    public String preview(String fileName){
//        // 查看文件地址
//        GetPresignedObjectUrlArgs build = new GetPresignedObjectUrlArgs().builder().bucket(minioProperties.getBucketName()).object(fileName).method(Method.GET).build();
//        try {
//            String url = minioClient.getPresignedObjectUrl(build);
//            return url;
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//    /**
//     * 文件下载
//     * @param fileName 文件名称
//     * @param res response
//     * @return Boolean
//     */
//    public void download(String fileName, HttpServletResponse res) {
//        GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(minioProperties.getBucketName())
//                .object(fileName).build();
//        try (GetObjectResponse response = minioClient.getObject(objectArgs)){
//            byte[] buf = new byte[1024];
//            int len;
//            try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()){
//                while ((len=response.read(buf))!=-1){
//                    os.write(buf,0,len);
//                }
//                os.flush();
//                byte[] bytes = os.toByteArray();
//                res.setCharacterEncoding("utf-8");
//                // 设置强制下载不打开
//                // res.setContentType("application/force-download");
//                res.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
//                try (ServletOutputStream stream = res.getOutputStream()){
//                    stream.write(bytes);
//                    stream.flush();
//                }
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 查看文件对象
//     * @return 存储bucket内文件对象信息
//     */
//    public List<Item> listObjects() {
//        Iterable<Result<Item>> results = minioClient.listObjects(
//                ListObjectsArgs.builder().bucket(minioProperties.getBucketName()).build());
//        List<Item> items = new ArrayList<>();
//        try {
//            for (Result<Item> result : results) {
//                items.add(result.get());
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//        return items;
//    }
//    /**
//     * 删除
//     * @param fileName
//     * @return
//     * @throws Exception
//     */
//    public boolean remove(String fileName){
//        try {
//            minioClient.removeObject( RemoveObjectArgs.builder().bucket(minioProperties.getBucketName()).object(fileName).build());
//        }catch (Exception e){
//            return false;
//        }
//        return true;
//    }
//}
